[Testing] Refactoring Feature Matrix UITest Cases for Shapes Control#34637
[Testing] Refactoring Feature Matrix UITest Cases for Shapes Control#34637HarishKumarSF4517 wants to merge 5 commits intodotnet:mainfrom
Conversation
Snapshots: - Delete wrong-named Line_FillColorWithStrokeColor_Shadow.png and PolyLine_FillColorWithStrokeColor_Shadow.png (tests are named Line_StrokeColor_Shadow / Polyline_StrokeColor_Shadow) - Rename PolyLine_* → Polyline_* on all platforms to match test method names (Android, iOS, ios-26, Mac, Windows) ShapesViewModel: - Extract duplicate point-parsing into ParsePointCollection() helper - Use CultureInfo.InvariantCulture in double.TryParse to avoid locale-dependent parsing of coordinate strings - Replace bare catch with catch (Exception ex) and log via Debug.WriteLine - Add System.Globalization using directive ShapesOptionsPage: - Remove redundant FillColor = null in OnFillColorChanged; HasFillColor setter already clears FillColor when set to false - Make GetColorByName static; use fully-qualified Microsoft.Maui.Graphics.Colors consistently for all color cases (was using bare Colors.Red for 'red') ShapesControlPage: - Add comment explaining why ResetToDefaults() is called before navigation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 34637Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 34637" |
|
Hey there @@HarishKumarSF4517! Thank you so much for your PR! Someone from the team will get assigned to your PR shortly and we'll get it reviewed. |
|
/azp run maui-pr-uitests |
|
Azure Pipelines successfully started running 1 pipeline(s). |
There was a problem hiding this comment.
Pull request overview
Refactors the Shapes Feature Matrix host UI + UITests to support additional shape properties and a new RoundRectangle shape, updating screenshot-based baselines accordingly.
Changes:
- Extended the Shapes host page/options UI and
ShapesViewModelto support new properties (e.g.,StrokeLineCap,StrokeLineJoin,FillRule,Aspect,CornerRadius) and introducedRoundRectangle. - Refactored options UI to reset state via
ResetToDefaults()for more deterministic screenshot tests. - Expanded/renamed screenshot UITest cases and updated snapshot baselines across platforms.
Reviewed changes
Copilot reviewed 7 out of 191 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShapesFeatureTests.cs | Refactors and expands screenshot-based tests; renames tests and adds many new cases including RoundRectangle and new property scenarios. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/Shapes/ShapesViewModel.cs | Adds new bindable properties and a ResetToDefaults() method; refactors point parsing and improves PathGeometry parse failure logging. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/Shapes/ShapesControlPage.xaml | Updates shape rendering bindings and adds the RoundRectangle shape with new property bindings. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/Shapes/ShapesControlPage.xaml.cs | Changes Options navigation to reset the existing view model instead of recreating it. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/Shapes/ShapesOptionsPage.xaml | Refactors the options UI layout, adds new property controls (Aspect/LineCap/LineJoin/FillRule), and introduces RoundRectangle options. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/Shapes/ShapesOptionsPage.xaml.cs | Adds handlers for new property radio groups and refactors property-section visibility logic. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/Shapes/ShapeConverters.cs | Removed unused converters (logic moved into the view model/bindings). |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/Shapes/EnumToBoolConverter.cs | Minor formatting-only change. |
| src/Controls/tests/TestCases.*.Tests/snapshots/** | Updates/adds screenshot baselines for the refactored shapes tests. |
src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShapesFeatureTests.cs
Show resolved
Hide resolved
src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShapesFeatureTests.cs
Show resolved
Hide resolved
🤖 AI Summary📊 Expand Full Review —
|
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #34637 | Refactor shapes tests + ResetToDefaults + snapshot updates | ❌ FAILED (Gate) | 8 code, ~183 PNG | Android + iOS PolyLine→Polyline snapshots not renamed |
🔧 Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix (claude-opus-4.6) | Add optional name param to VerifyShapeScreenshot(), pass old PolyLine_* snapshot names at call sites |
✅ PASS | ShapesFeatureTests.cs |
Works but creates method/snapshot naming inconsistency |
| 2 | try-fix (claude-sonnet-4.6) | git mv rename 4 PNG files: PolyLine_DashArray_DashOffset_Thickness.png → Polyline_* and PolyLine_Points_Thickness.png → Polyline_* in Android + iOS |
✅ PASS | 4 PNG files | Cleanest: fixes root cause, no code change, no orphan files |
| 3 | try-fix (gpt-5.3-codex) | Copy existing PNGs to new names (both PolyLine_* and Polyline_* coexist) |
✅ PASS | 4 new PNG files | Works but leaves 4 orphan PolyLine_* files |
| 4 | try-fix (gpt-5.4, gemini unavailable) | UITest.cs fallback: look up legacy name when new name not found + skip WinUI RoundRectangle_* tests |
✅ PASS | UITest.cs, ShapesFeatureTests.cs |
Complex infra change; touches shared test infra; addresses WinUI gap too |
| PR | PR #34637 | Refactor shapes tests + ResetToDefaults + snapshot updates | ❌ FAILED (Gate) | 8 code, ~183 PNG | Missing 4 snapshot renames in Android+iOS; WinUI baselines missing for RoundRectangle_* |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| claude-opus-4.6 | 2 | No | Confirmed git mv is correct; no new ideas |
| claude-sonnet-4.6 | 2 | No | Confirmed git mv; noted WinUI baselines require Windows capture |
| gpt-5.3-codex | 2 | Yes | Add missing WinUI baselines for RoundRectangle_* + Path_PathData_Thickness — environment-blocked (requires Windows) |
| gpt-5.4 | 2 | Yes | Same WinUI baselines idea — environment-blocked (requires Windows) |
| gpt-5.3-codex | 3 | Yes | Attribute-based baseline alias mechanism [ScreenshotBaselineAlias] — overly complex for test-only PR |
| gpt-5.4 | 3 | Yes | WinUI-skip via existing skip pattern — same concept as Attempt 4 |
| gpt-5.3-codex | 4 (final) | Yes | Duplicate baseline images (same content, both names) — same as Attempt 3 |
| gpt-5.4 | 4 (final) | Yes | Generate WinUI baselines from local Windows run — environment-blocked (same idea) |
Exhausted: Yes — 3 rounds completed; all remaining ideas are either environment-blocked (Windows required), already covered by Attempts 1-4, or too complex for a test-only PR.
Selected Fix: Attempt 2 — git mv rename 4 snapshot files
Reason: Attempt 2 is the minimal, correct fix that addresses the root cause directly. It renames only the 4 misnamed PNG files to align with the test method names (PolyLine_* → Polyline_*), with no code changes, no orphan files, and no infrastructure modifications. This is what the PR author should have done with git mv instead of git add new + git rm old (which left the old files in place as modified, not renamed).
Remaining issue (not fixed by any single attempt): The PR is also missing WinUI baseline snapshots for:
- All
RoundRectangle_*tests (6 new test methods) Path_PathData_Thickness(renamed fromPath_Points_Thickness)
These require running on Windows to capture. Until those baselines are added, WinUI tests for these scenarios will fail. The PR author needs to run the WinUI tests locally, capture the snapshots, and commit them.
📋 Report — Final Recommendation
⚠️ Final Recommendation: REQUEST CHANGES
Phase Status
| Phase | Status | Notes |
|---|---|---|
| Pre-Flight | ✅ COMPLETE | Test-only PR; gate identified 2 misnamed Android + 2 iOS snapshots as root cause |
| Gate | ❌ FAILED | Android — 2 snapshot name mismatches (PolyLine_* vs Polyline_*) |
| Try-Fix | ✅ COMPLETE | 4 attempts, all ✅ PASS; 3 rounds cross-pollination; best fix = Attempt 2 |
| Report | ✅ COMPLETE |
Summary
PR #34637 refactors the Shapes Feature Matrix UITests with new shape properties, a new RoundRectangle shape, test renames, and ~183 updated snapshots. The code quality and approach are good, but the PR has snapshot file naming inconsistencies that caused the gate to fail on Android, and missing WinUI baselines that will cause Windows CI failures.
Root Cause
The gate failed on Android because two snapshot files were modified but not renamed when their corresponding test methods were renamed from PolyLine_* → Polyline_* (case change on 'l'). On case-sensitive Linux filesystems, Polyline_DashArray_DashOffset_Thickness.png ≠ PolyLine_DashArray_DashOffset_Thickness.png:
TestCases.Android.Tests/snapshots/android/PolyLine_DashArray_DashOffset_Thickness.png→ must be renamed toPolyline_DashArray_DashOffset_Thickness.pngTestCases.Android.Tests/snapshots/android/PolyLine_Points_Thickness.png→ must be renamed toPolyline_Points_Thickness.pngTestCases.iOS.Tests/snapshots/ios/PolyLine_DashArray_DashOffset_Thickness.png→ same rename neededTestCases.iOS.Tests/snapshots/ios/PolyLine_Points_Thickness.png→ same rename needed
Mac and WinUI snapshot directories correctly performed the rename (R100 in git). Android and iOS only modified (M) content without renaming.
Additional issue: WinUI is missing baseline snapshots for:
- All 6 new
RoundRectangle_*test methods (no*.pngadded toTestCases.WinUI.Tests/snapshots/windows/) Path_PathData_Thickness(renamed fromPath_Points_Thickness— WinUI has old name, not new)
Fix Quality
Best fix: Attempt 2 — Use git mv to rename the 4 misnamed snapshot files. This is the cleanest, minimal fix: no code changes, no orphan files, aligns snapshot filenames with test method names.
# Android
git mv src/Controls/tests/TestCases.Android.Tests/snapshots/android/PolyLine_DashArray_DashOffset_Thickness.png \
src/Controls/tests/TestCases.Android.Tests/snapshots/android/Polyline_DashArray_DashOffset_Thickness.png
git mv src/Controls/tests/TestCases.Android.Tests/snapshots/android/PolyLine_Points_Thickness.png \
src/Controls/tests/TestCases.Android.Tests/snapshots/android/Polyline_Points_Thickness.png
# iOS
git mv src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/PolyLine_DashArray_DashOffset_Thickness.png \
src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/Polyline_DashArray_DashOffset_Thickness.png
git mv src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/PolyLine_Points_Thickness.png \
src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/Polyline_Points_Thickness.pngNon-snapshot code changes are well-done:
- ✅
[Category]moved to class level — correct per guidelines - ✅
ResetToDefaults()is a clean improvement overnew ShapesViewModel() - ✅ New
RoundRectangleshape + new property bindings are well-structured - ✅
EnumToBoolConverter.csrefactoring is correct ⚠️ [Test, Order(N)]ordering on all methods introduces test ordering dependency — tests should ideally be independent; however this is an existing pattern in the feature matrix tests
Required action from PR author:
- Rename the 4 snapshot files with
git mv(see commands above) - Run WinUI tests locally and commit the missing baseline snapshots for
RoundRectangle_*(6 tests) andPath_PathData_Thickness - Verify there are no remaining
PolyLine_FillColorWithStrokeColor_Shadowreferences in any snapshot directory that need cleanup
|
/azp run maui-pr-uitests |
|
Azure Pipelines successfully started running 1 pipeline(s). |
🚦 Gate — Test Verification📊 Expand Full Gate —
|
| Test | Without Fix (expect FAIL) | With Fix (expect PASS) |
|---|---|---|
🖥️ ShapesFeatureTests ShapesFeatureTests |
✅ FAIL — 2592s | ❌ FAIL — 1459s |
🔴 Without fix — 🖥️ ShapesFeatureTests: FAIL ✅ · 2592s
(truncated to last 15,000 chars)
pdatebuildnumber]10.0.60-ci+azdo.13681890
Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
UITest.Core -> /home/vsts/work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
UITest.Appium -> /home/vsts/work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
UITest.NUnit -> /home/vsts/work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
VisualTestUtils -> /home/vsts/work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
VisualTestUtils.MagickNet -> /home/vsts/work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
UITest.Analyzers -> /home/vsts/work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
Controls.TestCases.Android.Tests -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
Test run for /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
/home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.12] Discovering: Controls.TestCases.Android.Tests
[xUnit.net 00:00:00.42] Discovered: Controls.TestCases.Android.Tests
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
NUnit3TestExecutor discovered 55 of 55 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 03/29/2026 00:47:51 FixtureSetup for ShapesFeatureTests(Android)
>>>>> 03/29/2026 00:48:03 Rectangle_FillColorWithStrokeColor_Shadow Start
>>>>> 03/29/2026 00:48:14 Rectangle_FillColorWithStrokeColor_Shadow Stop
Passed Rectangle_FillColorWithStrokeColor_Shadow [11 s]
>>>>> 03/29/2026 00:48:15 Ellipse_FillColorWithStrokeColor_Shadow Start
>>>>> 03/29/2026 00:48:22 Ellipse_FillColorWithStrokeColor_Shadow Stop
Passed Ellipse_FillColorWithStrokeColor_Shadow [8 s]
>>>>> 03/29/2026 00:48:23 Line_StrokeColor_Shadow Start
>>>>> 03/29/2026 00:48:54 Line_StrokeColor_Shadow Stop
Passed Line_StrokeColor_Shadow [31 s]
>>>>> 03/29/2026 00:48:54 Polygon_FillColorWithStrokeColor_Shadow Start
>>>>> 03/29/2026 00:49:02 Polygon_FillColorWithStrokeColor_Shadow Stop
Passed Polygon_FillColorWithStrokeColor_Shadow [8 s]
>>>>> 03/29/2026 00:49:02 Polyline_StrokeColor_Shadow Start
>>>>> 03/29/2026 00:49:10 Polyline_StrokeColor_Shadow Stop
Passed Polyline_StrokeColor_Shadow [7 s]
>>>>> 03/29/2026 00:49:10 Path_FillColorWithStrokeColor_Shadow Start
>>>>> 03/29/2026 00:49:18 Path_FillColorWithStrokeColor_Shadow Stop
Passed Path_FillColorWithStrokeColor_Shadow [8 s]
>>>>> 03/29/2026 00:49:18 Rectangle_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 00:49:38 Rectangle_DashArray_DashOffset_Thickness Stop
Passed Rectangle_DashArray_DashOffset_Thickness [19 s]
>>>>> 03/29/2026 00:49:38 Ellipse_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 00:49:59 Ellipse_DashArray_DashOffset_Thickness Stop
Passed Ellipse_DashArray_DashOffset_Thickness [21 s]
>>>>> 03/29/2026 00:49:59 Polyline_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 00:50:22 Polyline_DashArray_DashOffset_Thickness Stop
>>>>> 03/29/2026 00:50:23 Log types: logcat, bugreport, server
Failed Polyline_DashArray_DashOffset_Thickness [23 s]
Error Message:
VisualTestUtils.VisualTestFailedException :
Baseline snapshot not yet created: /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/snapshots/android/Polyline_DashArray_DashOffset_Thickness.png
Ensure new snapshot is correct: /home/vsts/work/1/a/Controls.TestCases.Shared.Tests/snapshots-diff/android/Polyline_DashArray_DashOffset_Thickness.png
and if it is, push a change to add it to the 'snapshots' directory.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
Stack Trace:
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.ShapesFeatureTests.VerifyShapeScreenshot() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShapesFeatureTests.cs:line 23
at Microsoft.Maui.TestCases.Tests.ShapesFeatureTests.Polyline_DashArray_DashOffset_Thickness() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShapesFeatureTests.cs:line 291
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
>>>>> 03/29/2026 00:50:23 Polygon_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 00:50:43 Polygon_DashArray_DashOffset_Thickness Stop
Passed Polygon_DashArray_DashOffset_Thickness [20 s]
>>>>> 03/29/2026 00:50:43 Path_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 00:51:04 Path_DashArray_DashOffset_Thickness Stop
Passed Path_DashArray_DashOffset_Thickness [20 s]
>>>>> 03/29/2026 00:51:04 Line_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 00:51:47 Line_DashArray_DashOffset_Thickness Stop
Passed Line_DashArray_DashOffset_Thickness [43 s]
>>>>> 03/29/2026 00:51:47 Path_PathData_Thickness Start
>>>>> 03/29/2026 00:52:03 Path_PathData_Thickness Stop
Passed Path_PathData_Thickness [15 s]
>>>>> 03/29/2026 00:52:03 Polyline_Points_Thickness Start
>>>>> 03/29/2026 00:52:20 Polyline_Points_Thickness Stop
>>>>> 03/29/2026 00:52:20 Log types: logcat, bugreport, server
Failed Polyline_Points_Thickness [17 s]
Error Message:
VisualTestUtils.VisualTestFailedException :
Baseline snapshot not yet created: /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/snapshots/android/Polyline_Points_Thickness.png
Ensure new snapshot is correct: /home/vsts/work/1/a/Controls.TestCases.Shared.Tests/snapshots-diff/android/Polyline_Points_Thickness.png
and if it is, push a change to add it to the 'snapshots' directory.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
Stack Trace:
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.ShapesFeatureTests.VerifyShapeScreenshot() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShapesFeatureTests.cs:line 23
at Microsoft.Maui.TestCases.Tests.ShapesFeatureTests.Polyline_Points_Thickness() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShapesFeatureTests.cs:line 451
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
>>>>> 03/29/2026 00:52:21 Polygon_Pentagon Start
>>>>> 03/29/2026 00:52:32 Polygon_Pentagon Stop
Passed Polygon_Pentagon [10 s]
>>>>> 03/29/2026 00:52:32 Rectangle_XAndYRadius Start
>>>>> 03/29/2026 00:52:52 Rectangle_XAndYRadius Stop
Passed Rectangle_XAndYRadius [20 s]
>>>>> 03/29/2026 00:52:52 Rectangle_HeightAndWidth Start
>>>>> 03/29/2026 00:53:08 Rectangle_HeightAndWidth Stop
Passed Rectangle_HeightAndWidth [16 s]
>>>>> 03/29/2026 00:53:08 Rectangle_StrokeColor_Thickness Start
>>>>> 03/29/2026 00:53:18 Rectangle_StrokeColor_Thickness Stop
Passed Rectangle_StrokeColor_Thickness [10 s]
>>>>> 03/29/2026 00:53:19 Ellipse_StrokeColor_Thickness Start
>>>>> 03/29/2026 00:53:30 Ellipse_StrokeColor_Thickness Stop
Passed Ellipse_StrokeColor_Thickness [11 s]
>>>>> 03/29/2026 00:53:30 Line_StrokeColor_Thickness Start
>>>>> 03/29/2026 00:54:00 Line_StrokeColor_Thickness Stop
Passed Line_StrokeColor_Thickness [30 s]
>>>>> 03/29/2026 00:54:00 Polygon_StrokeColor_Thickness Start
>>>>> 03/29/2026 00:54:12 Polygon_StrokeColor_Thickness Stop
Passed Polygon_StrokeColor_Thickness [11 s]
>>>>> 03/29/2026 00:54:12 Polyline_StrokeColor_Thickness Start
>>>>> 03/29/2026 00:54:22 Polyline_StrokeColor_Thickness Stop
Passed Polyline_StrokeColor_Thickness [10 s]
>>>>> 03/29/2026 00:54:22 Path_StrokeColor_Thickness Start
>>>>> 03/29/2026 00:54:32 Path_StrokeColor_Thickness Stop
Passed Path_StrokeColor_Thickness [10 s]
>>>>> 03/29/2026 00:54:33 Rectangle_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 00:54:48 Rectangle_StrokeColor_DashArray_Thickness Stop
Passed Rectangle_StrokeColor_DashArray_Thickness [15 s]
>>>>> 03/29/2026 00:54:48 Ellipse_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 00:55:03 Ellipse_StrokeColor_DashArray_Thickness Stop
Passed Ellipse_StrokeColor_DashArray_Thickness [15 s]
>>>>> 03/29/2026 00:55:03 Line_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 00:55:40 Line_StrokeColor_DashArray_Thickness Stop
Passed Line_StrokeColor_DashArray_Thickness [37 s]
>>>>> 03/29/2026 00:55:41 Polygon_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 00:55:55 Polygon_StrokeColor_DashArray_Thickness Stop
Passed Polygon_StrokeColor_DashArray_Thickness [15 s]
>>>>> 03/29/2026 00:55:56 Polyline_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 00:56:11 Polyline_StrokeColor_DashArray_Thickness Stop
Passed Polyline_StrokeColor_DashArray_Thickness [15 s]
>>>>> 03/29/2026 00:56:11 Path_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 00:56:28 Path_StrokeColor_DashArray_Thickness Stop
Passed Path_StrokeColor_DashArray_Thickness [16 s]
>>>>> 03/29/2026 00:56:28 RoundRectangle_FillColorWithStrokeColor_Shadow Start
>>>>> 03/29/2026 00:56:36 RoundRectangle_FillColorWithStrokeColor_Shadow Stop
Passed RoundRectangle_FillColorWithStrokeColor_Shadow [8 s]
>>>>> 03/29/2026 00:56:36 RoundRectangle_CornerRadius Start
>>>>> 03/29/2026 00:56:53 RoundRectangle_CornerRadius Stop
Passed RoundRectangle_CornerRadius [16 s]
>>>>> 03/29/2026 00:56:53 RoundRectangle_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 00:57:18 RoundRectangle_DashArray_DashOffset_Thickness Stop
Passed RoundRectangle_DashArray_DashOffset_Thickness [25 s]
>>>>> 03/29/2026 00:57:18 Line_StrokeLineCap_Round Start
>>>>> 03/29/2026 00:57:51 Line_StrokeLineCap_Round Stop
Passed Line_StrokeLineCap_Round [33 s]
>>>>> 03/29/2026 00:57:51 Line_StrokeLineCap_Square Start
>>>>> 03/29/2026 00:58:23 Line_StrokeLineCap_Square Stop
Passed Line_StrokeLineCap_Square [31 s]
>>>>> 03/29/2026 00:58:23 Polyline_StrokeLineJoin_Round Start
>>>>> 03/29/2026 00:58:34 Polyline_StrokeLineJoin_Round Stop
Passed Polyline_StrokeLineJoin_Round [11 s]
>>>>> 03/29/2026 00:58:34 Polyline_StrokeLineJoin_Bevel Start
>>>>> 03/29/2026 00:58:45 Polyline_StrokeLineJoin_Bevel Stop
Passed Polyline_StrokeLineJoin_Bevel [11 s]
>>>>> 03/29/2026 00:58:45 Path_Aspect_Uniform Start
>>>>> 03/29/2026 00:58:57 Path_Aspect_Uniform Stop
Passed Path_Aspect_Uniform [11 s]
>>>>> 03/29/2026 00:58:57 Path_Aspect_Fill Start
>>>>> 03/29/2026 00:59:10 Path_Aspect_Fill Stop
Passed Path_Aspect_Fill [12 s]
>>>>> 03/29/2026 00:59:10 Path_Aspect_UniformToFill Start
>>>>> 03/29/2026 00:59:22 Path_Aspect_UniformToFill Stop
Passed Path_Aspect_UniformToFill [12 s]
>>>>> 03/29/2026 00:59:23 RoundRectangle_HeightAndWidth Start
>>>>> 03/29/2026 00:59:37 RoundRectangle_HeightAndWidth Stop
Passed RoundRectangle_HeightAndWidth [14 s]
>>>>> 03/29/2026 00:59:37 Ellipse_HeightAndWidth Start
>>>>> 03/29/2026 00:59:51 Ellipse_HeightAndWidth Stop
Passed Ellipse_HeightAndWidth [14 s]
>>>>> 03/29/2026 00:59:51 RoundRectangle_StrokeColor_Thickness Start
>>>>> 03/29/2026 01:00:03 RoundRectangle_StrokeColor_Thickness Stop
Passed RoundRectangle_StrokeColor_Thickness [11 s]
>>>>> 03/29/2026 01:00:03 RoundRectangle_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 01:00:19 RoundRectangle_StrokeColor_DashArray_Thickness Stop
Passed RoundRectangle_StrokeColor_DashArray_Thickness [15 s]
>>>>> 03/29/2026 01:00:19 Line_StrokeLineCap_Flat Start
>>>>> 03/29/2026 01:00:50 Line_StrokeLineCap_Flat Stop
Passed Line_StrokeLineCap_Flat [31 s]
>>>>> 03/29/2026 01:00:50 Polyline_StrokeLineCap_Round Start
>>>>> 03/29/2026 01:01:03 Polyline_StrokeLineCap_Round Stop
Passed Polyline_StrokeLineCap_Round [13 s]
>>>>> 03/29/2026 01:01:03 Polyline_StrokeLineCap_Square Start
>>>>> 03/29/2026 01:01:14 Polyline_StrokeLineCap_Square Stop
Passed Polyline_StrokeLineCap_Square [10 s]
>>>>> 03/29/2026 01:01:14 Path_StrokeLineCap_Round Start
>>>>> 03/29/2026 01:01:25 Path_StrokeLineCap_Round Stop
Passed Path_StrokeLineCap_Round [11 s]
>>>>> 03/29/2026 01:01:26 Path_StrokeLineCap_Square Start
>>>>> 03/29/2026 01:01:36 Path_StrokeLineCap_Square Stop
Passed Path_StrokeLineCap_Square [11 s]
>>>>> 03/29/2026 01:01:37 Polygon_StrokeLineJoin_Round Start
>>>>> 03/29/2026 01:01:47 Polygon_StrokeLineJoin_Round Stop
Passed Polygon_StrokeLineJoin_Round [10 s]
>>>>> 03/29/2026 01:01:47 Polygon_StrokeLineJoin_Bevel Start
>>>>> 03/29/2026 01:01:58 Polygon_StrokeLineJoin_Bevel Stop
Passed Polygon_StrokeLineJoin_Bevel [11 s]
>>>>> 03/29/2026 01:01:58 Path_StrokeLineJoin_Round Start
>>>>> 03/29/2026 01:02:10 Path_StrokeLineJoin_Round Stop
Passed Path_StrokeLineJoin_Round [11 s]
>>>>> 03/29/2026 01:02:10 Path_StrokeLineJoin_Bevel Start
>>>>> 03/29/2026 01:02:22 Path_StrokeLineJoin_Bevel Stop
Passed Path_StrokeLineJoin_Bevel [12 s]
>>>>> 03/29/2026 01:02:22 Polygon_FillRule_Nonzero Start
>>>>> 03/29/2026 01:02:33 Polygon_FillRule_Nonzero Stop
Passed Polygon_FillRule_Nonzero [11 s]
>>>>> 03/29/2026 01:02:33 Polyline_FillRule_Nonzero Start
>>>>> 03/29/2026 01:02:40 Polyline_FillRule_Nonzero Stop
Passed Polyline_FillRule_Nonzero [6 s]
>>>>> 03/29/2026 01:02:40 Path_Aspect_None Start
>>>>> 03/29/2026 01:02:53 Path_Aspect_None Stop
Passed Path_Aspect_None [13 s]
NUnit Adapter 4.5.0.0: Test execution complete
Test Run Failed.
Total tests: 55
Passed: 53
Failed: 2
Total time: 15.3765 Minutes
🟢 With fix — 🖥️ ShapesFeatureTests: FAIL ❌ · 1459s
(truncated to last 15,000 chars)
pdatebuildnumber]10.0.60-ci+azdo.13681890
Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
UITest.Core -> /home/vsts/work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
VisualTestUtils -> /home/vsts/work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
UITest.Appium -> /home/vsts/work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
UITest.NUnit -> /home/vsts/work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
VisualTestUtils.MagickNet -> /home/vsts/work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
UITest.Analyzers -> /home/vsts/work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
Controls.TestCases.Android.Tests -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
Test run for /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
/home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.11] Discovering: Controls.TestCases.Android.Tests
[xUnit.net 00:00:00.35] Discovered: Controls.TestCases.Android.Tests
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
NUnit3TestExecutor discovered 55 of 55 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 03/29/2026 01:12:19 FixtureSetup for ShapesFeatureTests(Android)
>>>>> 03/29/2026 01:12:28 Rectangle_FillColorWithStrokeColor_Shadow Start
>>>>> 03/29/2026 01:12:39 Rectangle_FillColorWithStrokeColor_Shadow Stop
Passed Rectangle_FillColorWithStrokeColor_Shadow [11 s]
>>>>> 03/29/2026 01:12:39 Ellipse_FillColorWithStrokeColor_Shadow Start
>>>>> 03/29/2026 01:12:47 Ellipse_FillColorWithStrokeColor_Shadow Stop
Passed Ellipse_FillColorWithStrokeColor_Shadow [8 s]
>>>>> 03/29/2026 01:12:47 Line_StrokeColor_Shadow Start
>>>>> 03/29/2026 01:13:17 Line_StrokeColor_Shadow Stop
Passed Line_StrokeColor_Shadow [29 s]
>>>>> 03/29/2026 01:13:17 Polygon_FillColorWithStrokeColor_Shadow Start
>>>>> 03/29/2026 01:13:26 Polygon_FillColorWithStrokeColor_Shadow Stop
Passed Polygon_FillColorWithStrokeColor_Shadow [8 s]
>>>>> 03/29/2026 01:13:26 Polyline_StrokeColor_Shadow Start
>>>>> 03/29/2026 01:13:31 Polyline_StrokeColor_Shadow Stop
Passed Polyline_StrokeColor_Shadow [5 s]
>>>>> 03/29/2026 01:13:32 Path_FillColorWithStrokeColor_Shadow Start
>>>>> 03/29/2026 01:13:39 Path_FillColorWithStrokeColor_Shadow Stop
Passed Path_FillColorWithStrokeColor_Shadow [7 s]
>>>>> 03/29/2026 01:13:40 Rectangle_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 01:13:59 Rectangle_DashArray_DashOffset_Thickness Stop
Passed Rectangle_DashArray_DashOffset_Thickness [19 s]
>>>>> 03/29/2026 01:13:59 Ellipse_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 01:14:20 Ellipse_DashArray_DashOffset_Thickness Stop
Passed Ellipse_DashArray_DashOffset_Thickness [20 s]
>>>>> 03/29/2026 01:14:20 Polyline_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 01:14:43 Polyline_DashArray_DashOffset_Thickness Stop
>>>>> 03/29/2026 01:14:43 Log types: logcat, bugreport, server
Failed Polyline_DashArray_DashOffset_Thickness [23 s]
Error Message:
VisualTestUtils.VisualTestFailedException :
Baseline snapshot not yet created: /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/snapshots/android/Polyline_DashArray_DashOffset_Thickness.png
Ensure new snapshot is correct: /home/vsts/work/1/a/Controls.TestCases.Shared.Tests/snapshots-diff/android/Polyline_DashArray_DashOffset_Thickness.png
and if it is, push a change to add it to the 'snapshots' directory.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
Stack Trace:
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.ShapesFeatureTests.VerifyShapeScreenshot() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShapesFeatureTests.cs:line 23
at Microsoft.Maui.TestCases.Tests.ShapesFeatureTests.Polyline_DashArray_DashOffset_Thickness() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShapesFeatureTests.cs:line 291
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
>>>>> 03/29/2026 01:14:44 Polygon_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 01:15:05 Polygon_DashArray_DashOffset_Thickness Stop
Passed Polygon_DashArray_DashOffset_Thickness [21 s]
>>>>> 03/29/2026 01:15:06 Path_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 01:15:26 Path_DashArray_DashOffset_Thickness Stop
Passed Path_DashArray_DashOffset_Thickness [20 s]
>>>>> 03/29/2026 01:15:26 Line_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 01:16:06 Line_DashArray_DashOffset_Thickness Stop
Passed Line_DashArray_DashOffset_Thickness [39 s]
>>>>> 03/29/2026 01:16:06 Path_PathData_Thickness Start
>>>>> 03/29/2026 01:16:21 Path_PathData_Thickness Stop
Passed Path_PathData_Thickness [15 s]
>>>>> 03/29/2026 01:16:21 Polyline_Points_Thickness Start
>>>>> 03/29/2026 01:16:38 Polyline_Points_Thickness Stop
>>>>> 03/29/2026 01:16:39 Log types: logcat, bugreport, server
Failed Polyline_Points_Thickness [17 s]
Error Message:
VisualTestUtils.VisualTestFailedException :
Baseline snapshot not yet created: /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/snapshots/android/Polyline_Points_Thickness.png
Ensure new snapshot is correct: /home/vsts/work/1/a/Controls.TestCases.Shared.Tests/snapshots-diff/android/Polyline_Points_Thickness.png
and if it is, push a change to add it to the 'snapshots' directory.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
Stack Trace:
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.ShapesFeatureTests.VerifyShapeScreenshot() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShapesFeatureTests.cs:line 23
at Microsoft.Maui.TestCases.Tests.ShapesFeatureTests.Polyline_Points_Thickness() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShapesFeatureTests.cs:line 451
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
>>>>> 03/29/2026 01:16:39 Polygon_Pentagon Start
>>>>> 03/29/2026 01:16:50 Polygon_Pentagon Stop
Passed Polygon_Pentagon [10 s]
>>>>> 03/29/2026 01:16:50 Rectangle_XAndYRadius Start
>>>>> 03/29/2026 01:17:10 Rectangle_XAndYRadius Stop
Passed Rectangle_XAndYRadius [19 s]
>>>>> 03/29/2026 01:17:10 Rectangle_HeightAndWidth Start
>>>>> 03/29/2026 01:17:24 Rectangle_HeightAndWidth Stop
Passed Rectangle_HeightAndWidth [14 s]
>>>>> 03/29/2026 01:17:24 Rectangle_StrokeColor_Thickness Start
>>>>> 03/29/2026 01:17:34 Rectangle_StrokeColor_Thickness Stop
Passed Rectangle_StrokeColor_Thickness [10 s]
>>>>> 03/29/2026 01:17:34 Ellipse_StrokeColor_Thickness Start
>>>>> 03/29/2026 01:17:45 Ellipse_StrokeColor_Thickness Stop
Passed Ellipse_StrokeColor_Thickness [11 s]
>>>>> 03/29/2026 01:17:45 Line_StrokeColor_Thickness Start
>>>>> 03/29/2026 01:18:18 Line_StrokeColor_Thickness Stop
Passed Line_StrokeColor_Thickness [32 s]
>>>>> 03/29/2026 01:18:18 Polygon_StrokeColor_Thickness Start
>>>>> 03/29/2026 01:18:30 Polygon_StrokeColor_Thickness Stop
Passed Polygon_StrokeColor_Thickness [12 s]
>>>>> 03/29/2026 01:18:30 Polyline_StrokeColor_Thickness Start
>>>>> 03/29/2026 01:18:42 Polyline_StrokeColor_Thickness Stop
Passed Polyline_StrokeColor_Thickness [11 s]
>>>>> 03/29/2026 01:18:42 Path_StrokeColor_Thickness Start
>>>>> 03/29/2026 01:18:52 Path_StrokeColor_Thickness Stop
Passed Path_StrokeColor_Thickness [10 s]
>>>>> 03/29/2026 01:18:52 Rectangle_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 01:19:07 Rectangle_StrokeColor_DashArray_Thickness Stop
Passed Rectangle_StrokeColor_DashArray_Thickness [15 s]
>>>>> 03/29/2026 01:19:07 Ellipse_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 01:19:24 Ellipse_StrokeColor_DashArray_Thickness Stop
Passed Ellipse_StrokeColor_DashArray_Thickness [16 s]
>>>>> 03/29/2026 01:19:24 Line_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 01:20:00 Line_StrokeColor_DashArray_Thickness Stop
Passed Line_StrokeColor_DashArray_Thickness [36 s]
>>>>> 03/29/2026 01:20:01 Polygon_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 01:20:16 Polygon_StrokeColor_DashArray_Thickness Stop
Passed Polygon_StrokeColor_DashArray_Thickness [15 s]
>>>>> 03/29/2026 01:20:16 Polyline_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 01:20:32 Polyline_StrokeColor_DashArray_Thickness Stop
Passed Polyline_StrokeColor_DashArray_Thickness [15 s]
>>>>> 03/29/2026 01:20:32 Path_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 01:20:46 Path_StrokeColor_DashArray_Thickness Stop
Passed Path_StrokeColor_DashArray_Thickness [14 s]
>>>>> 03/29/2026 01:20:46 RoundRectangle_FillColorWithStrokeColor_Shadow Start
>>>>> 03/29/2026 01:20:53 RoundRectangle_FillColorWithStrokeColor_Shadow Stop
Passed RoundRectangle_FillColorWithStrokeColor_Shadow [6 s]
>>>>> 03/29/2026 01:20:53 RoundRectangle_CornerRadius Start
>>>>> 03/29/2026 01:21:10 RoundRectangle_CornerRadius Stop
Passed RoundRectangle_CornerRadius [16 s]
>>>>> 03/29/2026 01:21:10 RoundRectangle_DashArray_DashOffset_Thickness Start
>>>>> 03/29/2026 01:21:35 RoundRectangle_DashArray_DashOffset_Thickness Stop
Passed RoundRectangle_DashArray_DashOffset_Thickness [25 s]
>>>>> 03/29/2026 01:21:35 Line_StrokeLineCap_Round Start
>>>>> 03/29/2026 01:22:07 Line_StrokeLineCap_Round Stop
Passed Line_StrokeLineCap_Round [32 s]
>>>>> 03/29/2026 01:22:07 Line_StrokeLineCap_Square Start
>>>>> 03/29/2026 01:22:41 Line_StrokeLineCap_Square Stop
Passed Line_StrokeLineCap_Square [33 s]
>>>>> 03/29/2026 01:22:41 Polyline_StrokeLineJoin_Round Start
>>>>> 03/29/2026 01:22:52 Polyline_StrokeLineJoin_Round Stop
Passed Polyline_StrokeLineJoin_Round [11 s]
>>>>> 03/29/2026 01:22:52 Polyline_StrokeLineJoin_Bevel Start
>>>>> 03/29/2026 01:23:04 Polyline_StrokeLineJoin_Bevel Stop
Passed Polyline_StrokeLineJoin_Bevel [11 s]
>>>>> 03/29/2026 01:23:04 Path_Aspect_Uniform Start
>>>>> 03/29/2026 01:23:16 Path_Aspect_Uniform Stop
Passed Path_Aspect_Uniform [12 s]
>>>>> 03/29/2026 01:23:16 Path_Aspect_Fill Start
>>>>> 03/29/2026 01:23:28 Path_Aspect_Fill Stop
Passed Path_Aspect_Fill [12 s]
>>>>> 03/29/2026 01:23:28 Path_Aspect_UniformToFill Start
>>>>> 03/29/2026 01:23:41 Path_Aspect_UniformToFill Stop
Passed Path_Aspect_UniformToFill [13 s]
>>>>> 03/29/2026 01:23:42 RoundRectangle_HeightAndWidth Start
>>>>> 03/29/2026 01:23:56 RoundRectangle_HeightAndWidth Stop
Passed RoundRectangle_HeightAndWidth [14 s]
>>>>> 03/29/2026 01:23:56 Ellipse_HeightAndWidth Start
>>>>> 03/29/2026 01:24:12 Ellipse_HeightAndWidth Stop
Passed Ellipse_HeightAndWidth [15 s]
>>>>> 03/29/2026 01:24:12 RoundRectangle_StrokeColor_Thickness Start
>>>>> 03/29/2026 01:24:22 RoundRectangle_StrokeColor_Thickness Stop
Passed RoundRectangle_StrokeColor_Thickness [10 s]
>>>>> 03/29/2026 01:24:22 RoundRectangle_StrokeColor_DashArray_Thickness Start
>>>>> 03/29/2026 01:24:38 RoundRectangle_StrokeColor_DashArray_Thickness Stop
Passed RoundRectangle_StrokeColor_DashArray_Thickness [15 s]
>>>>> 03/29/2026 01:24:38 Line_StrokeLineCap_Flat Start
>>>>> 03/29/2026 01:25:10 Line_StrokeLineCap_Flat Stop
Passed Line_StrokeLineCap_Flat [32 s]
>>>>> 03/29/2026 01:25:10 Polyline_StrokeLineCap_Round Start
>>>>> 03/29/2026 01:25:21 Polyline_StrokeLineCap_Round Stop
Passed Polyline_StrokeLineCap_Round [11 s]
>>>>> 03/29/2026 01:25:22 Polyline_StrokeLineCap_Square Start
>>>>> 03/29/2026 01:25:32 Polyline_StrokeLineCap_Square Stop
Passed Polyline_StrokeLineCap_Square [10 s]
>>>>> 03/29/2026 01:25:32 Path_StrokeLineCap_Round Start
>>>>> 03/29/2026 01:25:46 Path_StrokeLineCap_Round Stop
Passed Path_StrokeLineCap_Round [13 s]
>>>>> 03/29/2026 01:25:46 Path_StrokeLineCap_Square Start
>>>>> 03/29/2026 01:25:57 Path_StrokeLineCap_Square Stop
Passed Path_StrokeLineCap_Square [11 s]
>>>>> 03/29/2026 01:25:57 Polygon_StrokeLineJoin_Round Start
>>>>> 03/29/2026 01:26:08 Polygon_StrokeLineJoin_Round Stop
Passed Polygon_StrokeLineJoin_Round [11 s]
>>>>> 03/29/2026 01:26:09 Polygon_StrokeLineJoin_Bevel Start
>>>>> 03/29/2026 01:26:24 Polygon_StrokeLineJoin_Bevel Stop
Passed Polygon_StrokeLineJoin_Bevel [15 s]
>>>>> 03/29/2026 01:26:24 Path_StrokeLineJoin_Round Start
>>>>> 03/29/2026 01:26:35 Path_StrokeLineJoin_Round Stop
Passed Path_StrokeLineJoin_Round [11 s]
>>>>> 03/29/2026 01:26:35 Path_StrokeLineJoin_Bevel Start
>>>>> 03/29/2026 01:26:46 Path_StrokeLineJoin_Bevel Stop
Passed Path_StrokeLineJoin_Bevel [11 s]
>>>>> 03/29/2026 01:26:46 Polygon_FillRule_Nonzero Start
>>>>> 03/29/2026 01:26:58 Polygon_FillRule_Nonzero Stop
Passed Polygon_FillRule_Nonzero [12 s]
>>>>> 03/29/2026 01:26:58 Polyline_FillRule_Nonzero Start
>>>>> 03/29/2026 01:27:05 Polyline_FillRule_Nonzero Stop
Passed Polyline_FillRule_Nonzero [6 s]
>>>>> 03/29/2026 01:27:05 Path_Aspect_None Start
>>>>> 03/29/2026 01:27:18 Path_Aspect_None Stop
Passed Path_Aspect_None [13 s]
NUnit Adapter 4.5.0.0: Test execution complete
Test Run Failed.
Total tests: 55
Passed: 53
Failed: 2
Total time: 15.2091 Minutes
⚠️ Issues found
- ❌ ShapesFeatureTests FAILED with fix (should pass)
Polyline_DashArray_DashOffset_Thickness [23 s]; Polyline_Points_Thickness [17 s]VisualTestUtils.VisualTestFailedException : Baseline snapshot not yet created: /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/snapshots/android/Polyline_DashArray_Da...
📁 Fix files reverted (1 files)
eng/pipelines/ci-copilot.yml
|
/azp run maui-pr-uitests |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
/azp run maui-pr-uitests |
|
Azure Pipelines successfully started running 1 pipeline(s). |
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
This pull request significantly enhances the shapes feature matrix in the test host app by adding support for new shape properties, introducing the
RoundRectangleshape, and improving the testability and flexibility of shape options. Key changes include new bindings for advanced shape properties, an updated view model with a reset-to-defaults method, and UI/UX improvements for shape selection and property editing.Shape property and binding enhancements:
Added support for
StrokeLineCap,StrokeLineJoin,FillRule,Aspect, andCornerRadiusproperties in theShapesViewModeland bound these to the corresponding shape controls inShapesControlPage.xaml, allowing for more comprehensive shape customization and testing. [1] [2] [3] [4] [5] [6] [7]Updated the view model to provide sensible default values for all shape properties and added a
ResetToDefaultsmethod, ensuring each test starts from a known state. The navigation logic was updated to call this reset before opening the options page. [1] [2] [3] [4] [5]New shape and UI improvements:
Introduced support for the
RoundRectangleshape, including view model support, XAML bindings, and property section visibility logic in the options page. [1] [2] [3]Refactored the shape options page to simplify and generalize property section visibility, and added event handlers for new property radio button groups (aspect, line cap, line join, fill rule). [1] [2]
Code and test cleanup:
Removed the unused
ShapeConverters.csfile, as the shape property bindings and conversions are now handled directly in the view model and XAML.Minor improvements and bug fixes, such as using the correct color namespace and ensuring fill color is properly unset. [1] [2] [3]
These changes make the shapes feature matrix more robust, extensible, and easier to test for advanced shape scenarios.
Existing Issue Identified: